/*
## 来自你的消息:
请使用c++标准模板库中的链表类编写一个实现约瑟夫环的程序
*/

/*
## 来自WeTab AI的消息:
好的，我可以为您提供使用 C++ 标准模板库中的 `std::list` 类来实现约瑟夫环的程序。
*/

#include <iostream>
#include <list>

int josephus(int total, int skip) {
    std::list<int> people;
    for (int i = 1; i <= total; i++) {
        people.push_back(i);
    }

    auto current = people.begin();
    while (people.size() > 1) {
        for (int i = 1; i < skip; i++) {
            current++;
            if (current == people.end()) {
                current = people.begin();
            }
        }

        current = people.erase(current);
        if (current == people.end()) {
            current = people.begin();
        }
    }

    return *people.begin();
}

int main() {
    int total, skip;
    std::cout << "Enter total number of people: ";
    std::cin >> total;
    std::cout << "Enter the skip number: ";
    std::cin >> skip;

    int survivor = josephus(total, skip);
    std::cout << "Survivor: " << survivor << std::endl;

    return 0;
}


/*

这个程序使用 `std::list` 来存储人员，并实现了约瑟夫环的逻辑。
函数 `josephus` 接收总人数和间隔数作为参数，运行约瑟夫环算法，最终返回幸存者的编号。

您可以在本地编译和运行这个程序来查看约瑟夫环的结果。希望这个回答对您有帮助！如果有任何问题，请随时告诉我。
*/